home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / mint / toswinsc.zoo / xgem.h < prev   
C/C++ Source or Header  |  1992-10-27  |  10KB  |  274 lines

  1. /*
  2.  * Copyright 1992 Eric R. Smith. All rights reserved.
  3.  * Redistribution is permitted only if the distribution
  4.  * is not for profit, and only if all documentation
  5.  * (including, in particular, the file "copying")
  6.  * is included in the distribution in unmodified form.
  7.  * THIS PROGRAM COMES WITH ABSOLUTELY NO WARRANTY, NOT
  8.  * EVEN THE IMPLIED WARRANTIES OF MERCHANTIBILITY OR
  9.  * FITNESS FOR A PARTICULAR PURPOSE. USE AT YOUR OWN
  10.  * RISK.
  11.  */
  12. #include <gemfast.h>
  13. #include <aesbind.h>
  14. #include <vdibind.h>
  15.  
  16. #ifndef TRUE
  17. #define TRUE 1
  18. #define FALSE 0
  19. #endif
  20.  
  21. #ifndef UCHAR
  22. #define UCHAR unsigned char
  23. #endif
  24.  
  25. /* types definitions for the object library */
  26.  
  27. /* type for holding various menus */
  28.  
  29. typedef struct menu_entry {
  30.     struct menu_entry *next;
  31.     char    *entry;        /* string for this entry */
  32.     void    (*func)();    /* function to call when selection made */
  33.     void    *arg;        /* argument for above function */
  34.     int    keycode;    /* keyboard equivalent, if any */
  35.     int    state;        /* initial menu state (e.g. DISABLED) */
  36.     int    index;        /* menu index in object tree */
  37. } ENTRY;
  38.  
  39. typedef struct menu {
  40.     struct menu *next;
  41.     char     *title;
  42.     ENTRY     *contents;    /* pointer to menu contents */
  43.     int     width;        /* max. width of any entry in the menu */
  44.     int     index;        /* index into object tree */
  45. } MENU;
  46.  
  47.  
  48. /* Generic window type */
  49.  
  50. typedef struct win WINDOW;
  51.  
  52. struct win {
  53.     int    wi_handle;    /* AES window handle */
  54.     int    wi_kind;    /* window gadgets */
  55.     int    wi_x, wi_y,
  56.         wi_w, wi_h;    /* size of window working area */
  57.  
  58.     int    wi_fullx, wi_fully,
  59.         wi_fullw, wi_fullh;
  60.  
  61.     char     *wi_title;
  62.     struct win *next;    /* next window in list */
  63.  
  64.     int    wtype;        /* type of window */
  65. #define GENERIC_WIN    0
  66. #define TEXT_WIN    1
  67. #define GRAPH_WIN    2
  68. #define OBJ_WIN        3
  69.  
  70.     int    flags;        /* various window flags */
  71. #define WFULLED    1
  72. #define WICONIFIED 2        /* window is in iconified format */
  73.  
  74.     int    icon_slot;    /* icon manager slot */
  75.     int    old_wkind;    /* old window gadgets before iconification */
  76.  
  77. /* Pointer to extra data for subclasses */
  78.     void    *extra;
  79.  
  80. /* functions to call when something happens to the window */
  81.     void    (*draw) __PROTO((WINDOW *, int x, int y, int w, int h));
  82.     void    (*topped) __PROTO((WINDOW *));
  83.     void    (*closed) __PROTO((WINDOW *));
  84.     void    (*fulled) __PROTO((WINDOW *));
  85.     void    (*sized) __PROTO((WINDOW *, int x, int y, int w, int h));
  86.     void    (*moved) __PROTO((WINDOW *, int x, int y, int w, int h));
  87.     void    (*arrowed) __PROTO((WINDOW *, int msg));
  88.     void    (*hslid) __PROTO((WINDOW *, int hpos));
  89.     void    (*vslid) __PROTO((WINDOW *, int vpos));
  90.     int    (*keyinp) __PROTO((WINDOW *, int keycode, int shft ));
  91.     int    (*mouseinp) __PROTO((WINDOW *, int clicks, int x, int y, 
  92.                 int shft, int mbuttons));
  93.     void    (*iconify) __PROTO((WINDOW *, int, int, int, int, int));
  94.     void    (*oldfulled) __PROTO((WINDOW *));
  95.     int    (*oldmouse) __PROTO((WINDOW *, int, int, int, int, int));
  96.     int    prevx, prevy, prevw, prevh;
  97.     MENU    *menu;        /* menu that goes with this window */
  98.     char    *infostr;    /* string to put in the INFO line */
  99. };
  100.  
  101. /* Text window */
  102. typedef struct textwin {
  103.     WINDOW    *win;        /* underlying WINDOW struct */
  104.     int    offx, offy;    /* offset of window (0, 0) position */
  105.     short    maxx;        /* number of characters across */
  106.     short    miny;        /* first 'real' line (previous lines are scrollback */
  107.     short    maxy;        /* number of characters down */
  108. #define SCROLLBACK(t) ((t)->miny)
  109. #define NROWS(t) ((t)->maxy - (t)->miny)
  110. #define NCOLS(t) ((t)->maxx)
  111.  
  112.     short    cx, cy;        /* current cursor position (character coord.) */
  113.     short    cmaxwidth;    /* max. character width */
  114.     short    cheight;    /* character height */
  115.     short    cbase;        /* distance from character baseline to top */
  116.     short    cfont;        /* font for characters */
  117.     short    cpoints;    /* size of characters in points */
  118.     short    savex, savey;    /* saved cursor position */
  119.     short    term_flags;    /* e.g. cursor on/off */
  120. #define FINSERT    0x1000    /* insert characters */
  121. #define FFLASH    0x2000    /* cursor is currently showing */
  122. #define FCURS    0x4000    /* cursor enabled */
  123. #define FWRAP    0x8000    /* wrap at end of line */
  124.     short    term_cattr;    /* current character attributes */
  125.                 /* also foreground and background colors */
  126.  
  127.     short    escy1;        /* first char. for ESC Y */
  128.     void    (*output)();    /* output function */
  129.     UCHAR    **data;        /* terminal data */
  130.     short    **cflag;    /* flags for individual characters */
  131. #define CBGCOL        0x000f    /* background color mask */
  132. #define CFGCOL        0x00f0    /* foreground color mask */
  133. #define COLORS(fg, bg)    (((fg) << 4) | (bg))
  134. #define CEFFECTS    0x0f00    /* VDI output style mask */
  135. #define     CE_BOLD        0x0100
  136. #define        CE_LIGHT    0x0200
  137. #define        CE_ITALIC    0x0400
  138. #define        CE_UNDERLINE    0x0800
  139. #define CINVERSE    0x1000    /* character is in inverse video */
  140. #define CSELECTED    0x2000    /* character has been selected by mouse */
  141. #define CTOUCHED    0x4000    /* character attributes have changed */
  142. #define CDIRTY        0x8000    /* the character itself has changed */
  143.  
  144.     char    *dirty;        /* marks whether lines need redrawing */
  145. #define SOMEDIRTY    0x01        /* some of the line needs redrawing */
  146. #define ALLDIRTY    0x02        /* whole line is dirty */
  147.     int    fd;        /* file descriptor for pseudo-tty */
  148.     int    pgrp;        /* process group for terminal */
  149.     int    scrolled;    /* number of lines to scroll before re-draw */
  150.     int    nbytes;        /* number of bytes written to window since
  151.                    last refresh */
  152.     int    draw_time;    /* set to indicate how long it's been since
  153.                    the last refresh */
  154.     char    *prog;        /* program name */
  155.     char    *cmdlin;    /* program command line */
  156.     char    *progdir;    /* program current directory */
  157.     void    (*callback)();    /* call this when the capture buffer is full */
  158. #define CAPTURESIZE 79
  159.     char    captbuf[CAPTURESIZE+1];
  160.     int    captsiz;
  161.     int    minADE, maxADE;    /* min. and max. character the font can
  162.                    display */
  163.     short    *cwidths;    /* table of font widths */
  164.     short    flashtimer;    /* counter for flashing cursor */
  165.     short    flashperiod;    /* timer for flashing */
  166. } TEXTWIN;
  167.  
  168. /* global variables */
  169. extern int phys_handle, vdi_handle, gl_apid;
  170. extern int gl_hchar, gl_wchar, gl_wbox, gl_hbox;
  171. extern int xdesk, ydesk, wdesk, hdesk;
  172. extern int gl_numfonts;
  173. extern int gl_rx, gl_ry, gl_rw, gl_rh, gl_rstate;
  174. extern int gl_screenplanes;
  175.  
  176. extern int gl_done;        /* set to 1 when the user wants to exit */
  177. extern WINDOW *gl_winlist, *gl_topwin;
  178.  
  179. extern char *about_string;    /* string for the "About..." dialog box */
  180. extern void (*about_func)();    /* function called when above is selected */
  181.  
  182. extern long gl_timer;        /* if evnt_loop should time out */
  183. extern void (*fn_timeout)();    /* called on a time out */
  184. extern void (*fn_message)();
  185. extern int (*fn_key)();        /* called for key presses */
  186. extern void (*fn_mouse)();    /* called for mouse clicks */
  187. extern void (*fn_rect)();    /* called for rectangle events */
  188.  
  189. /*
  190.  * misc. gem utility functions
  191.  */
  192.  
  193. __EXTERN void open_vwork    __PROTO((void));
  194. __EXTERN void close_vwork    __PROTO((void));
  195. __EXTERN void init_gem        __PROTO((void));
  196. __EXTERN void exit_gem        __PROTO((int));
  197. __EXTERN void evnt_loop        __PROTO((void));
  198. __EXTERN void hide_mouse    __PROTO((void));
  199. __EXTERN void show_mouse    __PROTO((void));
  200. __EXTERN void set_clip        __PROTO((int, int, int, int));
  201. __EXTERN void reset_clip    __PROTO((void));
  202. __EXTERN int ALT        __PROTO((int));
  203. __EXTERN char *UNALT        __PROTO((int));
  204. __EXTERN void set_fillcolor    __PROTO((int));
  205. __EXTERN void set_textcolor    __PROTO((int));
  206. __EXTERN void set_texteffects    __PROTO((int));
  207. __EXTERN void set_wrmode    __PROTO((int));
  208. __EXTERN void set_font        __PROTO((int, int));
  209. __EXTERN void set_fillstyle    __PROTO((int, int));
  210.  
  211. /*
  212.  * functions for dealing with menus
  213.  */
  214.  
  215. __EXTERN MENU *create_menu    __PROTO(( const char *title ));
  216. __EXTERN void destroy_menu    __PROTO(( MENU * ));
  217.  
  218. __EXTERN ENTRY *add_entry    __PROTO(( MENU *, char *, void (*)(), void *,
  219.                       int, int ));
  220. __EXTERN void show_menu        __PROTO(( MENU * ));
  221. __EXTERN void hide_menu        __PROTO(( void ));
  222. __EXTERN int menu_key        __PROTO(( int, int ));
  223. __EXTERN void check_entry    __PROTO(( MENU *, ENTRY * ));
  224. __EXTERN void uncheck_entry    __PROTO(( MENU *, ENTRY * ));
  225. __EXTERN void enable_entry    __PROTO(( MENU *, ENTRY * ));
  226. __EXTERN void disable_entry    __PROTO(( MENU *, ENTRY * ));